#!/usr/bin/env python

# This is statement is required by the build system to query build info
if __name__ == '__build__':
    raise Exception

import sys
import string

from OpenGL.GL import *
from OpenGL.Tk import *


try:
    from numpy import *
except ImportError:
    try:
        from Numeric import *
    except ImportError:
        print("This demo requires the numpy or Numeric extension, sorry")
        import sys

        sys.exit()
import PIL.Image as Image

WIDTH = 800
HEIGHT = 600


class OglFrame:
    def Redraw(self, event=None):
        glDisable(GL_LIGHTING)
        glBegin(GL_LINES)

        ## +x axis points left
        glColor3f(1, 0, 0)
        glVertex3fv([0, 0, 0])
        glVertex3fv(self.axispoints[0].tolist())

        ## +y axis points up
        glColor3f(0, 1, 0)
        glVertex3fv([0, 0, 0])
        glVertex3fv(self.axispoints[1].tolist())

        ## +z-axis points away
        glColor3f(0, 0, 1)
        glVertex3fv([0, 0, 0])
        glVertex3fv(self.axispoints[2].tolist())

        glEnd()

    def Photo(self, event=None):
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
        pixels = glReadPixels(0, 0, self.keywords['width'], self.keywords['height'], GL_RGBA, GL_UNSIGNED_BYTE)
        im = Image.new("RGB", (self.keywords['width'], self.keywords['height']))
        im.fromstring(pixels)
        im.save(self.imagename)

    def __init__(self, master=None, redraw=None, *arguments, **keywords):
        self.imagename = "photo.ppm"
        self.master = master
        self.keywords = keywords
        self.OglFrame = Frame(self.master, width=320, height=200)
        self.OglFrame.pack(side='top', expand=1, fill='both')
        self.keywords['double'] = 1
        self.ogl = Opengl(self.OglFrame, self.keywords)
        self.ogl.pack(side='top', expand=1, fill='both')
        self.ogl.bind('<Shift-Button-2>', self.Photo)
        self.ogl.bind('<Button-2>', self.ogl.tkRecordMouse)
        self.ogl.bind('<B2-Motion>', self.ogl.tkTranslate)
        self.ogl.bind('<Button-1>', self.ogl.StartRotate)
        self.ogl.bind('<B1-Motion>', self.ogl.tkRotate)
        self.ogl.bind('<Button-3>', self.ogl.tkRecordMouse)
        self.ogl.bind('<B3-Motion>', self.ogl.tkScale)

        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glEnable(GL_BLEND);
        glEnable(GL_LINE_SMOOTH);

        self.ogl.set_background(0, 0, 0)

        if redraw == None:
            self.ogl.redraw = self.Redraw
        else:
            self.ogl.redraw = redraw

        self.mainloop = self.ogl.mainloop

        self.axispoints = identity((3))


if __name__ == '__main__':
    x = OglFrame(None, None, width=320, height=200, double=1, depth=1)
    x.mainloop()
